/*
 * ModeloMenos1.cpp
 *
 *  Created on: 24/06/2012
 *      Author: natuchis
 */

#include "ModeloMenos1.h"

typedef pair<char, Caracter> ParCaracter;

ModeloMenos1::ModeloMenos1() {

	// Los 256 caracteres + EOF
	this->frecTotal = 257;
}

ModeloMenos1::~ModeloMenos1() {

}

void ModeloMenos1::actualizarModeloYExcluidos(string contexto, char carac, set<char> *excluidos) {
}

void ModeloMenos1::comprimir(string contexto, char carac, set<char> *excluidos, Datos &datos, bool estoyEnElEof) {

	map<string,Caracter> mapa;

	unsigned long int frecTotalActual = this->getFrecuenciaTotal(contexto) - this->getCantExcluidosPresentesEnModelo(contexto,excluidos);

	this->agregarCaracteresNoExcluidos(mapa, excluidos);

	datos.setCaracteres(mapa);

	datos.setFrecTotal(frecTotalActual);

	if (!estoyEnElEof) {
		datos.setCaracAComp(string(1,carac));
	}
	else {
		datos.setCaracAComp("EOF");
	}
}

unsigned long int ModeloMenos1::getFrecuenciaTotal(string contexto) {

	return this->frecTotal;
}

unsigned long int ModeloMenos1::getCantExcluidosPresentesEnModelo(string contexto, set<char> *excluidos){

	return excluidos->size();
}

bool ModeloMenos1::existeCaracterEnEsteContexto(string contexto, char carac) {
	return true;
}

void ModeloMenos1::agregarContexto(string Contexto) {
}

void ModeloMenos1::agregarCaracter(char carac) {
}

void ModeloMenos1::getMapa(string contexto, map<string,Caracter> &mapa, set<char> *excluidos) {

	this->agregarCaracteresNoExcluidos(mapa,excluidos);
}

unsigned long int ModeloMenos1::getFrecuenciaTotalExcluidos(string contexto, set<char> *excluidos) {

	return excluidos->size();
}

void ModeloMenos1::setExcluidos(string contexto, set<char> *excluidos) {
}

unsigned long int ModeloMenos1::getFrecuenciaEsc(string contexto) {

	return 0;
}

void ModeloMenos1::actualizar(string contexto, char carac) {
}

void ModeloMenos1::agregarCaracteresNoExcluidos(map<string, Caracter> &mapa, set<char> *excluidos) {
	for (unsigned short int i = 0; i<(this->frecTotal -1) ; i++) {
		if (excluidos->find((char)i) == excluidos->end()) {
			mapa.insert(pair<string,Caracter>(string(1,(char)i),Caracter()));
		}
	}
	mapa.insert(pair<string,Caracter>("EOF",Caracter()));
}
